package com.gitee.slowcreator.http.params;

import com.gitee.slowcreator.http.constant.ScParamsTypeConstant;
import com.gitee.slowcreator.http.file.download.DownloadResult;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Arrays;
import java.util.Map;

/**
 * @author zxw
 * @date 2023/1/6 下午10:58
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ScReturn implements ScBase {

    /**
     * 下载文件的数据/或者是返回数据都放在这
     * 如果遇到异常未设置抛出异常 这里会存放通过 e.getMessage() 获取的异常信息
     * 非完整异常 完整异常会打印error级别异常日志
     * <p>
     * 新版文件数据 会放在 downloadResult 里面，不会放在这里，走旧版的方式的话还是放在这里
     */
    private byte[] data;

    /**
     * 请求状态 是否成功
     */
    private boolean success;

    /**
     * 是否出现异常
     */
    private boolean exception = false;

    /**
     * response的contentType
     */
    private String contentType;

    /**
     * 返回的header
     */
    private Map<String, String> returnHeader;

    /**
     * 解析后的数据
     */
    private ScParseResult parseData;

    /**
     * 下载结果
     */
    private DownloadResult downloadResult;

    @Override
    public String type() {

        return ScParamsTypeConstant.RETURN;
    }

    @Override
    public String toString() {

        return "ScReturn{" +
                "data=" + Arrays.toString(data) +
                ", success=" + success +
                ", exception=" + exception +
                ", contentType='" + contentType + '\'' +
                ", returnHeader=" + returnHeader +
                ", parseData=" + parseData +
                ", downloadResult=" + downloadResult +
                '}';
    }

    /**
     * 不输出 data字段 这里可能是文件 很大
     *
     * @param removeDate 是否不输出data字段
     * @return
     */
    public String toString(boolean removeDate) {

        if (!removeDate) {
            return toString();
        }

        return "ScReturn{" +
                "success=" + success +
                ", exception=" + exception +
                ", contentType='" + contentType + '\'' +
                ", returnHeader=" + returnHeader +
                ", parseData=" + parseData +
                ", downloadResult=" + downloadResult.toString(true) +
                '}';
    }
}
